<?php

Yii::import('application.modules.campanias.models._base.BaseCampania');

class Campania extends BaseCampania {

    public $tipo;
    public $accion; //sms - lalma
    public $nombreOperador;

    /**
     * @return Campania
     */
    public function searchParams() {
        return array(
            'nombre',
//            'campania_id',
        );
    }

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Campaña|Campañas', $n);
    }

    public function attributeLabels() {
        return array_merge(parent::attributeLabels(), array(
            'fecha_inicio' => Yii::t('app', 'Fecha de Inicio'),
            'fecha_fin' => Yii::t('app', 'Fecha de Finalización'),
            'usuario_creacion_id' => Yii::t('app', 'Usuario Creador'),
            'rating' => Yii::t('app', 'Calificación'),
            'tipo' => Yii::t('app', "Tipo"),
            'accion' => Yii::t('app', "Acciones"),
            'nosey_form_id' => Yii::t('app', 'Formulario'),
        ));
    }

    public function rules() {
        return array_merge(parent::rules(), array(
            array('accion', 'required', 'message' => 'Seleccione una acción.',
            ),
        ));
    }

    public function relations() {
        return array_merge(parent::relations(), array(
            'notas' => array(self::HAS_MANY, 'Nota', 'entidad_id', 'condition' => 'entidad_tipo = "campania"'),
//            'eventos' => array(self::HAS_MANY, 'Evento', 'entidad_id', 'condition' => 'entidad_tipo = "cuenta"'),
            'campaniaaccion' => array(self::HAS_MANY, 'CampaniaAccion', 'campania_id'),
            'noseyForm' => array(self::HAS_ONE, 'NoseyEntidadAnswer', array('nosey_form_id' => 'nosey_form_id')),
        ));
    }

    /** @author Mauricio Chamorro <mchamorro@tradesystem.com.ec>
     * Scoop para buscar las campañas diferentes de estado anuladas
     * @return 
     */
    public function scopes() {
        return array(
            'estado_anulado' => array(
                'condition' => 't.estado != :estado',
                'params' => array(
                    ':estado' => Campanias_Constants::ANULADA,
                ),
            ),
            'activos' => array(//TODO
                'condition' => 't.estado != :estado',
                'params' => array(
                    ':estado' => Campanias_Constants::ANULADA,
//                    ':permisos' => self::PERMISOS_ALL,
//                    ':owner_id' => Yii::app()->user->id,
                ),
            ),
        );
    }

    /**
     * @author Mauricio Chamorro <mchamorro@tradesystem.com.ec>
     * funcion que cambia el estado a ANULADA de una campaña
     * @param type $id id de la campaña
     */
    public function setEstadoAnulado($id) {
        $command = Yii::app()->db->createCommand()
                ->update('campania', array('estado' => Campanias_Constants::ANULADA,), "id=:id", array(':id' => $id));
    }

    /**
     * @author Mauricio Chamorro <mchamorro@tradesystem.com.ec>
     * Realiza un array con los clientes de una determinada campaña
     * @param type $idCampania 
     * @return array
     */
    public function clientesCuentas($idCampania) {
        $grupos = CampaniaClientesOwner::model()->findAll();
        $clientesCuentas = array();
        foreach ($grupos as $grupo) {
            if ($grupo->campania_id == $idCampania) {
                array_push($clientesCuentas, $grupo);
            }
        }
        return $clientesCuentas;
    }

    /**
     * @author Miguel Alba <malba@tradesystem.com.ec>
     * @param type $campania_id
     * @return type
     */
    public function campaniaAccionCuentas($campania_id = null) {
        $command = Yii::app()->db->createCommand()
                ->select("
                     cacc.entidad_tipo
                        ")
                ->from("campania ca")
                ->join('campania_accion cacc', 'ca.id=cacc.campania_id')
                ->where("ca.id = :campania", array(':campania' => $campania_id));

        $accionesCampania = $command->queryAll();
        $result = array();
        foreach ($accionesCampania as $key => $value) {
            foreach ($value as $key1 => $value1) {
                $result[$key] = $value1;
            }
        }
        return $result;
    }

    /**
     * 
     * @return boolean
     */
    public function permitirBotonesFecha() {
        $datetime1 = new DateTime(Util::FormatDate($this->fecha_inicio, 'Y-m-d'));
        $datetime2 = new DateTime(Util::FormatDate(Util::FechaActual(), 'Y-m-d'));
        $interval = $datetime1->diff($datetime2);
        if ($interval->format('%R%') == '-')
            return false;
        else if ($interval->format('%R%') == '+')
            return true;
    }

    public function getStar($campania_id = null) {
        $command = Yii::app()->db->createCommand()
                ->select("c.id as id,
                    concat('INICIO') as title,
                    DATE_FORMAT(c.fecha_inicio,'%Y-%m-%d') as start")
                ->from("campania c")
                ->Where("c.id=:id", array(':id' => $campania_id));

        return ($command->queryAll());
    }

    public function getEnd($campania_id = null) {
        $command = Yii::app()->db->createCommand()
                ->select("c.id as id,
                 concat('FIN') as title,
                 DATE_FORMAT(c.fecha_fin,'%Y-%m-%d') as start")
                ->from("campania c")
                ->Where("c.id=:id", array(':id' => $campania_id));

        return ($command->queryAll());
    }

    /*     * ************************************************ Dashboard**************************************** */

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * Recupera todas las acciones de campaña para generar el pie General de acciones por campaña
     * @param type $campania_id
     * @return type
     */
    public function generatePieGeneralCampania($campania_id) {

        $report = array();
        $report['title']['text'] = '';
        $report['credits']['enabled'] = false;
        $report['chart']['height'] = '280';
        $report['plotOptions'] = array(
            'pie' => array(
                'allowPointSelect' => true,
                'cursor' => 'pointer',
                'dataLabels' => array(
                    'enabled' => false,
                    'format' => '<b>{point.name}</b>: {point.percentage:.1f} %'
                ),
                'showInLegend' => true,
                'tooltip' => array(
                    'pointFormat' => 'Porcentaje: <b>{point.percentage:.1f}%</b><br>{series.name}: <b>{point.y}</b>'
                ),
            )
        );
        $report['series'] = array();
        $consulta = Yii::app()->db->createCommand()
                ->select('ce.entidad_tipo, count(*) as count')
                ->from('campania_entidad ce')
                ->where(' ce.campania_id=:campania_id ', array(':campania_id' => $campania_id))
                ->group('ce.entidad_tipo')
                ->order('ce.entidad_tipo');
        /* SELECT count(*) as count,ce.entidad_tipo FROM campania_entidad ce where ce.campania_id=8
          group by ce.entidad_tipo; */
        $options = $consulta->queryAll();
        $series = array(
            'type' => 'pie',
            'name' => 'Cantidad',
            'data' => array()
        );
        foreach ($options as $option) {
            $series['data'][] = array(Util::Truncate($option['entidad_tipo'], 21), (int) $option['count']);
        }
        $report['series'][] = $series;
        return $report;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * @param type $campania_id
     * @return type
     */
    public function generatePieLlamadaCampania($campania_id) {

        $report = array();
        $report['title']['text'] = '';
        $report['credits']['enabled'] = false;
        $report['chart']['height'] = '280';
        $report['plotOptions'] = array(
            'pie' => array(
                'allowPointSelect' => true,
                'cursor' => 'pointer',
                'dataLabels' => array(
                    'enabled' => false,
                    'format' => '<b>{point.name}</b>: {point.percentage:.1f} %'
                ),
                'showInLegend' => true,
                'tooltip' => array(
                    'pointFormat' => 'Porcentaje: <b>{point.percentage:.1f}%</b><br>{series.name}: <b>{point.y}</b>'
                ),
            )
        );
        $report['series'] = array();
        $consulta = Yii::app()->db->createCommand()
                ->select('s.estado_llamada, count(ce.id) as count')
                ->from('campania_entidad ce')
                ->leftJoin('llamada s', 's.id = ce.entidad_id')
                ->where('ce.campania_id=:campania_id and ce.entidad_tipo= :entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::LLAMADA,))
                ->group('s.estado_llamada');
        // ->order('ce.entidad_tipo');
        /* SELECT s.fecha_creacion,s.estado_llamada,count(s.id) FROM campania_entidad ce 
          inner JOIN llamada s on s.id=ce.entidad_id
          where ce.campania_id=9 and ce.entidad_tipo='LLAMADA'
          group by(s.estado_llamada) */
        $options = $consulta->queryAll();
        $series = array(
            'type' => 'pie',
            'name' => 'Cantidad',
            'data' => array()
        );
        foreach ($options as $option) {
            $series['data'][] = array(Util::setName(Util::Truncate($option['estado_llamada'], 21)), (int) $option['count']);
        }
        $report['series'][] = $series;
        return $report;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * @param type $campania_id
     * @return type
     */
    public function generatePieMailCampania($campania_id) {

        $report = array();
        $report['title']['text'] = '';
        $report['credits']['enabled'] = false;
        $report['chart']['height'] = '280';
        $report['plotOptions'] = array(
            'pie' => array(
                'allowPointSelect' => true,
                'cursor' => 'pointer',
                'dataLabels' => array(
                    'enabled' => false,
                    'format' => '<b>{point.name}</b>: {point.percentage:.1f} %'
                ),
                'showInLegend' => true,
                'tooltip' => array(
                    'pointFormat' => 'Porcentaje: <b>{point.percentage:.1f}%</b><br>{series.name}: <b>{point.y}</b>'
                ),
            )
        );
        $report['series'] = array();
        $consulta = Yii::app()->db->createCommand()
                ->select('s.estado, count(ce.id) as count')
                ->from('campania_entidad ce')
                ->leftJoin('mail s', 's.id = ce.entidad_id')
                ->where('ce.campania_id=:campania_id and ce.entidad_tipo= :entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::EMAIL,))
                ->group('s.estado');
        $options = $consulta->queryAll();
//        var_dump($options);
//        die();
        $series = array(
            'type' => 'pie',
            'name' => 'Cantidad',
            'data' => array()
        );
        foreach ($options as $option) {
            $series['data'][] = array(Util::setName(Util::Truncate($option['estado'], 21)), (int) $option['count']);
        }
        $report['series'][] = $series;
        return $report;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * @param type $campania_id
     * @return type
     */
    public function generatePieSmsCampania($campania_id) {

        $report = array();
        $report['title']['text'] = '';
        $report['credits']['enabled'] = false;
        $report['chart']['height'] = '280';
        $report['plotOptions'] = array(
            'pie' => array(
                'allowPointSelect' => true,
                'cursor' => 'pointer',
                'dataLabels' => array(
                    'enabled' => false,
                    'format' => '<b>{point.name}</b>: {point.percentage:.1f} %'
                ),
                'showInLegend' => true,
                'tooltip' => array(
                    'pointFormat' => 'Porcentaje: <b>{point.percentage:.1f}%</b><br>{series.name}: <b>{point.y}</b>'
                ),
            )
        );
        $report['series'] = array();
        $consulta = Yii::app()->db->createCommand()
                ->select('s.estado, count(ce.id) as count')
                ->from('campania_entidad ce')
                ->leftJoin('sms s', 's.id = ce.entidad_id')
                ->where('ce.campania_id=:campania_id and ce.entidad_tipo= :entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::SMS,))
                ->group('s.estado');
        $options = $consulta->queryAll();
//        var_dump($options);
//        die();
        $series = array(
            'type' => 'pie',
            'name' => 'Cantidad',
            'data' => array()
        );
        foreach ($options as $option) {
            $series['data'][] = array(Util::setName(Util::Truncate($option['estado'], 21)), (int) $option['count']);
        }
        $report['series'][] = $series;
        return $report;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * @param type $campania_id
     * @return string
     */
    public function generateColumnGeneralCampania($campania_id) {

        $fechaActual = date('d/m/Y');
        $inicio = DateTime::createFromFormat('d/m/Y', date('01/m/Y'))->setTime(0, 0, 0);
        $fin = DateTime::createFromFormat('d/m/Y', $fechaActual)->setTime(0, 0, 0);
        date_add($fin, date_interval_create_from_date_string('1 day'));
        $interval = DateInterval::createFromDateString('1 day');
        $period = new DatePeriod($inicio, $interval, $fin);

        $data = array();
        foreach ($period as $date) {
            $campaniaAcciones = Campania::model()->findByPk($campania_id)->campaniaAccions;
            $acciones = Campania::model()->accionesPorCampania($campaniaAcciones);
            $dataMail = array();
            $dataSms = array();
            $dataLlamada = array();

            foreach ($acciones as $accion) {

                if ($accion == Campanias_Constants::EMAIL) {
                    $dataMail = $this->consulta($campania_id, $accion, $inicio, $fin);
                } else if ($accion == Campanias_Constants::SMS) {
                    $dataSms = $this->consulta($campania_id, $accion, $inicio, $fin);
                } else if ($accion == Campanias_Constants::LLAMADA) {
                    $dataLlamada = $this->consulta($campania_id, $accion, $inicio, $fin);
                }
            }
        }
        $report = array();
        $report['chart']['height'] = '280';
        $report['title']['text'] = '';
        $report['xAxis']['labels'] = array("rotation" => -45);
        foreach ($period as $date) {

            $categoria = $date->format('d-M');
            $report['xAxis']['categories'][] = $categoria;
        }
        $dataMail = !empty($dataMail) ? $this->dataPorAccion($report['xAxis']['categories'], $dataMail) : null;
        $dataLlamada = !empty($dataLlamada) ? $this->dataPorAccion($report['xAxis']['categories'], $dataLlamada) : null;
        $dataSms = !empty($dataSms) ? $this->dataPorAccion($report['xAxis']['categories'], $dataSms) : null;
        $report['yAxis']['title']['text'] = 'Acciones';
        $report['tooltip']['shared'] = true;
        $report['tooltip']['valueSuffix'] = ' Acciones';
        $report['credits']['enabled'] = false;
        $report['colors']['colors'] = array('#FF2F2F', '#FFD148', '#6AC36A');
        ($dataMail) ? $report['series'][] = array('name' => 'MAIL', 'data' => $dataMail, 'type' => 'column') : '';
        ($dataLlamada) ? $report['series'][] = array('name' => 'LLAMADA', 'data' => $dataLlamada, 'type' => 'column') : '';
        ($dataSms) ? $report['series'][] = array('name' => 'SMS', 'data' => $dataSms, 'type' => 'column') : '';
        return $report;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec> 
     * @param type $campania_id
     * @return type
     */
    public function generateLineLlamadaCampania($campania_id) {
        $fechaActual = date('d/m/Y');
        $inicio = DateTime::createFromFormat('d/m/Y', date('01/m/Y'))->setTime(0, 0, 0);
        $fin = DateTime::createFromFormat('d/m/Y', $fechaActual)->setTime(0, 0, 0);
        date_add($fin, date_interval_create_from_date_string('1 day'));
        $interval = DateInterval::createFromDateString('1 day');
        $period = new DatePeriod($inicio, $interval, $fin);
        //$this->consulta($campania_id, Campanias_Constants::LLAMADA, null, null, false);
        /*
          SELECT s.fecha_creacion,s.estado_llamada
          FROM campania_entidad ce
          inner JOIN llamada s on s.id=ce.entidad_id
          where ce.campania_id=9 and ce.entidad_tipo='LLAMADA'
          group by( s.fecha_creacion)
         *              */

        $estados = LlamadaSubestado::model()->getEstadoLlamadaOpciones();

        /**/
        $consulta = Yii::app()->db->createCommand()
                ->select('s.fecha_creacion,s.estado_llamada')
                ->from('campania_entidad ce')
                ->join('llamada s', 's.id = ce.entidad_id')
                ->where('ce.campania_id=:campania_id AND ce.entidad_tipo=:entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::LLAMADA))
                ->order('s.fecha_creacion');
        $options = $consulta->queryAll();
        $dias = array();
        $datosestado = $this->dataPorEstadoAccion($estados, $options, Campanias_Constants::LLAMADA);
        $data = array();
        $report = array();
        $report['chart']['height'] = '280';
        $report['title']['text'] = '';
        $report['xAxis']['labels'] = array("rotation" => -45);
        foreach ($period as $date) {

            $categoria = $date->format('d-M');
            $report['xAxis']['categories'][] = $categoria;
        }
        $dataSeries = array();
        $dataFinal = array();
        foreach ($datosestado as $key => $value) {
            $data = $this->dataPorAccion($report['xAxis']['categories'], $value);
            $dataSeries['name'] = Util::setName($key);
            $dataSeries['data'] = $data;
            array_push($dataFinal, $dataSeries);
        }



        $report['yAxis']['title']['text'] = 'llamadas';
        $report['tooltip']['shared'] = true;
        $report['tooltip']['valueSuffix'] = ' llamadas';
        $report['credits']['enabled'] = false;
        $report['series'] = $dataFinal;
        return $report;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec> 
     * @param type $campania_id
     * @return type
     */
    public function generateLineMailCampania($campania_id) {
        $fechaActual = date('d/m/Y');
        $inicio = DateTime::createFromFormat('d/m/Y', date('01/m/Y'))->setTime(0, 0, 0);
        $fin = DateTime::createFromFormat('d/m/Y', $fechaActual)->setTime(0, 0, 0);
        date_add($fin, date_interval_create_from_date_string('1 day'));
        $interval = DateInterval::createFromDateString('1 day');
        $period = new DatePeriod($inicio, $interval, $fin);
        //$this->consulta($campania_id, Campanias_Constants::EMAIL, null, null, false);
        /*
          SELECT s.fecha_creacion,s.estado_llamada
          FROM campania_entidad ce
          inner JOIN llamada s on s.id=ce.entidad_id
          where ce.campania_id=9 and ce.entidad_tipo='LLAMADA'
          group by( s.fecha_creacion)
         *              */

        $estados = Mail::model()->getEstadoEmailOpciones();

        /**/
        $consulta = Yii::app()->db->createCommand()
                ->select('s.fecha_creacion,s.estado')
                ->from('campania_entidad ce')
                ->join('mail s', 's.id = ce.entidad_id')
                ->where('ce.campania_id=:campania_id AND ce.entidad_tipo=:entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::EMAIL))
                ->order('s.fecha_creacion');
        $options = $consulta->queryAll();
//        var_dump($options);die();
        $dias = array();
        $datosestado = $this->dataPorEstadoAccion($estados, $options);

        $data = array();
        $report = array();
        $report['chart']['height'] = '280';
        $report['title']['text'] = '';
        $report['xAxis']['labels'] = array("rotation" => -45);
        foreach ($period as $date) {

            $categoria = $date->format('d-M');
            $report['xAxis']['categories'][] = $categoria;
        }
        $dataSeries = array();
        $dataFinal = array();
        foreach ($datosestado as $key => $value) {
//            var_dump($value);
//            $data = (!empty($value)) ? $this->dataPorAccion($report['xAxis']['categories'], $value) : array();
            $data = $this->dataPorAccion($report['xAxis']['categories'], $value);
            $dataSeries['name'] = Util::setName($key);
            $dataSeries['data'] = $data;
            array_push($dataFinal, $dataSeries);
        }
//        var_dump($dataFinal);
//         die();
        $report['yAxis']['title']['text'] = 'Emails';
        $report['tooltip']['shared'] = true;
        $report['tooltip']['valueSuffix'] = ' Emails';
        $report['credits']['enabled'] = false;
        $report['series'] = $dataFinal;

        return $report;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec> 
     * @param type $campania_id
     * @return type
     */
    public function generateLineSmsCampania($campania_id) {
        $fechaActual = date('d/m/Y');
        $inicio = DateTime::createFromFormat('d/m/Y', date('01/m/Y'))->setTime(0, 0, 0);
        $fin = DateTime::createFromFormat('d/m/Y', $fechaActual)->setTime(0, 0, 0);
        date_add($fin, date_interval_create_from_date_string('1 day'));
        $interval = DateInterval::createFromDateString('1 day');
        $period = new DatePeriod($inicio, $interval, $fin);
        //$this->consulta($campania_id, Campanias_Constants::EMAIL, null, null, false);
        /*
          SELECT s.fecha_creacion,s.estado_llamada
          FROM campania_entidad ce
          inner JOIN llamada s on s.id=ce.entidad_id
          where ce.campania_id=9 and ce.entidad_tipo='LLAMADA'
          group by( s.fecha_creacion)
         *              */

        $estados = Sms::model()->getStatusOptions();

        /**/
        $consulta = Yii::app()->db->createCommand()
                ->select('s.fecha_creacion,s.estado')
                ->from('campania_entidad ce')
                ->join('sms s', 's.id = ce.entidad_id')
                ->where('ce.campania_id=:campania_id AND ce.entidad_tipo=:entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::SMS))
                ->order('s.fecha_creacion');
        $options = $consulta->queryAll();
//        var_dump($options);die();
        $dias = array();
        $datosestado = $this->dataPorEstadoAccion($estados, $options);
        $data = array();
        $report = array();
        $report['chart']['height'] = '280';
        $report['title']['text'] = '';
        $report['xAxis']['labels'] = array("rotation" => -45);
        foreach ($period as $date) {

            $categoria = $date->format('d-M');
            $report['xAxis']['categories'][] = $categoria;
        }
        $dataSeries = array();
        $dataFinal = array();
        foreach ($datosestado as $key => $value) {
            $data = $this->dataPorAccion($report['xAxis']['categories'], $value);
//            $data = (!empty($value)) ? $this->dataPorAccion($report['xAxis']['categories'], $value) : array();
            $dataSeries['name'] = Util::setName($key);
            $dataSeries['data'] = $data;
            array_push($dataFinal, $dataSeries);
        }


        $report['yAxis']['title']['text'] = 'Sms';
        $report['tooltip']['shared'] = true;
        $report['tooltip']['valueSuffix'] = ' Sms';
        $report['credits']['enabled'] = false;
        $report['series'] = $dataFinal;
        return $report;
    }

    /*     * ************************************************************************************************* */

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * Devuelve un array de as acciones por campaña
     * @param type $campania
     * @return array
     */
    public function accionesPorCampania($campania) {
        $acciones = array();
        foreach ($campania as $campaniaAccion) {
            array_push($acciones, $campaniaAccion->entidad_tipo);
        }

        return $acciones;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * nos premite saber si una campaña pertenece a una accion
     * @param type $campania
     * @return array
     */
    public function accionDeCampania($campania_id, $accion = null) {
        $consulta = Yii::app()->db->createCommand()
                ->select('count(ce.id) as count')
                ->from('campania_entidad ce');

        ($accion) ? $consulta->where('ce.campania_id=:campania_id AND ce.entidad_tipo=:entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => $accion)) : $consulta->where('ce.campania_id=:campania_id', array(':campania_id' => $campania_id));

        $options = $consulta->queryAll();
        if ($options[0]['count']) {
            $visible = true;
        } else {
            $visible = false;
        }

        return $visible;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * @param type $categorias
     * @param type $data
     * @return array
     */
    public function dataPorAccion($categorias, $data) {
        $dataAccion = array();
        foreach ($categorias as $value) {
            if (array_key_exists($value, $data)) {
                array_push($dataAccion, $data[$value]);
            } else {
                array_push($dataAccion, 0);
            }
        }
        return $dataAccion;
    }

    /**
     * 
     * @param type $estados estados de accion sea LLAMADA,MAIL,SMS recibe estados ej. array(CONTACTADO, NO CONTACTADO) 
     * @param type $consulta
     * @return type
     */
    public function dataPorEstadoAccion($estados, $consulta, $accion = null) {
        $estado1 = array();
        $contactados = array();
        $nocontactados = array();
        foreach ($estados as $key => $value) {
            $estado1[$key] = array();
            foreach ($consulta as $estado) {


                if ($accion == Campanias_Constants::LLAMADA) {
                    if ($estado['estado_llamada'] == $key) {

                        array_push($contactados, date('d-M', strtotime($estado['fecha_creacion'])));
                    }
                } else {
                    if ($estado['estado'] == $key) {

                        array_push($contactados, date('d-M', strtotime($estado['fecha_creacion'])));
                    }
                }
            }
            $estado1[$key] = $contactados;
            $contactados = array();
        }
        $contadorDias = array();
        foreach ($estado1 as $key => $value) {
            $contadorDias[$key] = array_count_values($value);
        }
        return $contadorDias;
    }

    /**
     * @author Diego Gabriel Echeverria <dgecheverria@tradesystem.com.ec>
     * @param type $motivo
     * @param type $inicio
     * @param type $fin
     * @return type
     */
    private function consulta($campania_id, $accion, $inicio = null, $fin = null, $reporteGeneral = true) {
        if ($inicio != null && $fin != null) {
            $inicio = $inicio->format('Y-m-d H:i:s');
            $fin = $fin->format('Y-m-d H:i:s');
        }
        $dias = array();
        /*
         * SELECT * FROM campania_entidad ce 
          inner JOIN sms s on s.id=ce.entidad_id
          where ce.campania_id=8 and ce.entidad_tipo='SMS';
         */

        if ($accion == Campanias_Constants::EMAIL) {
            if ($reporteGeneral) {
                $consulta = Yii::app()->db->createCommand()
                        ->select('ce.entidad_tipo,m.fecha_envio, count(ce.id) as count')
                        ->from('campania_entidad ce')
                        ->leftJoin('mail m', 'm.id = ce.entidad_id')
                        ->where('ce.campania_id=:campania_id and ce.entidad_tipo= :entidad_tipo and m.fecha_envio between :inicio and :fin', array(':campania_id' => $campania_id, ':entidad_tipo' => $accion, ':inicio' => $inicio, ':fin' => $fin))
                        ->group('ce.id');
                $options = $consulta->queryAll();
                foreach ($options as $dia) {

                    array_push($dias, date('d-M', strtotime($dia['fecha_envio'])));
                }
            } else {
                /* para consulta de campaña por accion */
                $estados = Mail::model()->getEstadoEmailOpciones();

                $consulta = Yii::app()->db->createCommand()
                        ->select('s.fecha_creacion,s.estado')
                        ->from('campania_entidad ce')
                        ->join('mail s', 's.id = ce.entidad_id')
                        ->where('ce.campania_id=:campania_id AND ce.entidad_tipo=:entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::EMAIL))
                        ->order('s.fecha_creacion');
                $options = $consulta->queryAll();
//                 var_dump($options);die();
                $dias = array();
            }
        } else if ($accion == Campanias_Constants::LLAMADA) {
            /* SELECT s.fecha_creacion,s.estado_llamada,count(ce.id) 
              FROM campania_entidad ce
              inner JOIN llamada s on s.id=ce.entidad_id
              where ce.campania_id=9 and ce.entidad_tipo='LLAMADA'
              group by(s.estado_llamada)
             */
            if ($reporteGeneral) {
                $consulta = Yii::app()->db->createCommand()
                        ->select('ce.entidad_tipo,s.fecha_creacion, count(ce.id) as count')
                        ->from('campania_entidad ce')
                        ->leftJoin('llamada s', 's.id = ce.entidad_id')
                        ->where('ce.campania_id=:campania_id and ce.entidad_tipo= :entidad_tipo and s.fecha_creacion between :inicio and :fin', array(':campania_id' => $campania_id, ':entidad_tipo' => $accion, ':inicio' => $inicio, ':fin' => $fin))
                        ->group('ce.id');
                $options = $consulta->queryAll();
                foreach ($options as $dia) {

                    array_push($dias, date('d-M', strtotime($dia['fecha_creacion'])));
                }
            } else {
                /* para consulta de campaña por accion */
                $estados = LlamadaSubestado::model()->getEstadoLlamadaOpciones();
                $consulta = Yii::app()->db->createCommand()
                        ->select('s.fecha_creacion,s.estado_llamada')
                        ->from('campania_entidad ce')
                        ->join('llamada s', 's.id = ce.entidad_id')
                        ->where('ce.campania_id=:campania_id AND ce.entidad_tipo=:entidad_tipo ', array(':campania_id' => $campania_id, ':entidad_tipo' => Campanias_Constants::LLAMADA))
                        ->order('s.fecha_creacion');
                $options = $consulta->queryAll();
                $dias = array();
            }
        } else if ($accion == Campanias_Constants::SMS) {
            if ($reporteGeneral) {
                $consulta = Yii::app()->db->createCommand()
                        ->select('ce.entidad_tipo,s.fecha_creacion, count(ce.id) as count')
                        ->from('campania_entidad ce')
                        ->leftJoin('sms s', 's.id = ce.entidad_id')
                        ->where('ce.campania_id=:campania_id and ce.entidad_tipo= :entidad_tipo and s.fecha_envio between :inicio and :fin', array(':campania_id' => $campania_id, ':entidad_tipo' => $accion, ':inicio' => $inicio, ':fin' => $fin))
                        ->group('ce.id');
                $options = $consulta->queryAll();
                foreach ($options as $dia) {

                    array_push($dias, date('d-M', strtotime($dia['fecha_creacion'])));
                }
            }
        }
        $contadorDias = array_count_values($dias);
        return $contadorDias;
    }

    /**
     * @author Mauricio Chamorro <mchamorro@tradesystem.com.ec>
     * Devuelve las fechas inicial y final de una campaña
     * @param type $campania_id
     * @return type
     */
    public function de_FechasLimite($campania_id) {
        $command = Yii::app()->db->createCommand()
                ->select("DATE_FORMAT(c.fecha_inicio,'%d/%m/%Y') as start, DATE_FORMAT(c.fecha_fin,'%d/%m/%Y') as end")
                ->from("campania c")
                ->Where("c.id=:id", array(':id' => $campania_id));

        $data = $command->queryAll();
        return ($data[0] ? $data[0] : '');
    }

    /**
     * @author Pablo Arciniega <parciniega@tradesystem.com.ec>
     * @param type $campania_id
     * @return string
     */
    public function generateColumnFormularioCampania($campania_id) {

        $fechaActual = date('d/m/Y');
        $inicio = DateTime::createFromFormat('d/m/Y', date('01/m/Y'))->setTime(0, 0, 0);
        $fin = DateTime::createFromFormat('d/m/Y', $fechaActual)->setTime(0, 0, 0);
        date_add($fin, date_interval_create_from_date_string('1 day'));
        $interval = DateInterval::createFromDateString('1 day');
        $period = new DatePeriod($inicio, $interval, $fin);
//        select na.creation_date from nosey_entidad_answer nea
//inner join nosey_answer na on na.entity_id=nea.id
//where nea.entidad_tipo='campania' and nea.entidad_id=1
        $consulta = Yii::app()->db->createCommand()
                ->select('na.creation_date')
                ->from('nosey_entidad_answer nea')
                ->join('nosey_answer na', 'na.entity_id = nea.id')
                ->where('nea.entidad_tipo=:entidad_tipo and nea.entidad_id= :entidad_id and na.creation_date between :inicio and :fin', array(':entidad_tipo' => Campania::model()->tableName(), ':entidad_id' => $campania_id, ':inicio' => $inicio->format('Y-m-d H:i:s'), ':fin' => $fin->format('Y-m-d H:i:s')));
        $options = $consulta->queryAll();
        $dias = array();
        foreach ($options as $dia) {

            array_push($dias, date('d-M', strtotime($dia['creation_date'])));
        }

        $contadorDias = array_count_values($dias);
        $report = array();
        $report['chart']['height'] = '280';
        $report['title']['text'] = '';
        $report['xAxis']['labels'] = array("rotation" => -45);
        foreach ($period as $date) {
            $categoria = $date->format('d-M');
            $report['xAxis']['categories'][] = $categoria;
        }
        $dataMail = $this->dataPorAccion($report['xAxis']['categories'], $contadorDias);
        $report['yAxis']['title']['text'] = 'Formularios Respondidos';
        $report['tooltip']['shared'] = true;
        $report['tooltip']['valueSuffix'] = ' Formularios';
        $report['credits']['enabled'] = false;
//        $report['colors']['colors'] = array('#FF2F2F', '#FFD148', '#6AC36A');
        $report['series'][] = array('name' => 'Respuestas', 'data' => $dataMail, 'type' => 'column');
        return $report;
    }

    public function getCampaniasOperador($idOperador) {
//        SELECT (select  cus.username from cruge_user cus where cus.iduser=cco.owner_id) as owner_id ,cco.campania_id from campania_clientes_owner cco
//
//where cco.owner_id=3
//group by cco.campania_id

        $criteria = new CDbCriteria;
        $sort = new CSort;


        $criteria->select = "t.id, t.nombre, t.fecha_inicio, t.fecha_fin";

        $criteria->compare('t.nombre', $this->nombre, true);
//        $criteria->compare('(select  cus.username from cruge_user cus where cus.iduser=t.owner_id)', $this->owner_id, true, 'OR');
//        $criteria->compare('co.documento', $this->identificacion, true, 'OR');
//        $criteria->compare('CONCAT(IFNULL(CONCAT(co.nombre," "),""),IFNULL(co.apellido,""))', $this->cliente_id, true, 'OR');

        $criteria->join = "inner join campania_clientes_owner cco";
        $criteria->addCondition("cco.owner_id=:idRol");
        $Params = array(
            ':idRol' => $idOperador
        );

        $criteria->group = " t.id";

        $criteria->params = array_merge($criteria->params, $Params);

//        $sort->attributes = array(
//            't.cliente_id' => array(
//                'asc' => 'CONCAT(IFNULL(CONCAT(co.nombre," "),""),IFNULL(co.apellido,"")) asc',
//                'desc' => 'CONCAT(IFNULL(CONCAT(co.nombre," "),""),IFNULL(co.apellido,"")) desc',
//            ),
//            
//            't.owner_id' => array(
//                'asc' => '(select  cus.username from cruge_user cus where cus.iduser=t.owner_id) asc',
//                'desc' => '(select  cus.username from cruge_user cus where cus.iduser=t.owner_id) desc',
//            ),
//            'cantidad_sms' => array(
//                'asc' => '(select count(*) from (campania_entidad ce inner join sms s on ce.entidad_id=s.id and ce.entidad_tipo=:entidad_sms)where s.contacto_id=co.id ) asc',
//                'desc' => '(select count(*) from (campania_entidad ce inner join sms s on ce.entidad_id=s.id and ce.entidad_tipo=:entidad_sms)where s.contacto_id=co.id ) desc',
//            ),
//            'cantidad_llamada' => array(
//                'asc' => '(select count(*) from (campania_entidad ce inner join llamada ll on ce.entidad_id=ll.id and ce.entidad_tipo=:entidad_llamada)where ll.contacto_id=co.id ) asc',
//                'desc' => '(select count(*) from (campania_entidad ce inner join llamada ll on ce.entidad_id=ll.id and ce.entidad_tipo=:entidad_llamada)where ll.contacto_id=co.id ) desc',
//            ),
//            'cantidad_mail' => array(
//                'asc' => '(select count(*) from (campania_entidad ce inner join mail ml on ce.entidad_id=ml.id and ce.entidad_tipo=:entidad_mail)where ml.contacto_id=co.id ) asc',
//                'desc' => '(select count(*) from (campania_entidad ce inner join mail ml on ce.entidad_id=ml.id and ce.entidad_tipo=:entidad_mail)where ml.contacto_id=co.id ) desc',
//            ),
//            'identificacion' => array(
//                'asc' => 'co.documento asc',
//                'desc' => 'co.documento desc',
//            ),
//            '*'
//        );
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
            'sort' => $sort,
        ));
    }

}
